﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TheBullysStore.Models;
using System.Json;
using log4net;
using TheBullysStore.Models.ModuloServicios.Incidencia;
using TheBullysStore.Controllers.ModuloServicios;
using TheBullysStore.Models.ModuloAdministracion.Mantenible;
using TheBullysStore.Models.ModuloAdministracion.TipoIncidencia;
using TheBullysStore.Models.ModuloAdministracion.Edificio;
using TheBullysStore.Models.ModuloAdministracion.Usuario;
using TheBullysStore.Models.ModuloAdministracion.TipoDoc;
using TheBullysStore.Models.ModuloAdministracion.Departamento;

namespace TheBullysStore.Controllers.ModuloServicio
{
    public class IncidenciaController : Controller
    {
        //
        // GET: /Incidencia/
        private static ILog log = LogManager.GetLogger(typeof(IncidenciaController));
        private TheBullysStoreDB db = new TheBullysStoreDB();
        IncidenciaFacade incidenciaFacade = new IncidenciaFacade();
        TipoIncidenciaFacade tipoincidenciaFacade = new TipoIncidenciaFacade();
        EdificioFacade edificioFacade = new EdificioFacade();
        MantenibleFacade mantenibleFacade = new MantenibleFacade();
        UsuarioFacade usuarioFacade = new UsuarioFacade();
        IncidenciaDAO incidenciaDAO = new IncidenciaDAO();
        TipoDocFacade tipodocFacade = new TipoDocFacade();
        DepartamentoFacade departamentoFacade = new DepartamentoFacade();
        EdificioDAO edificioDAO = new EdificioDAO();

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Incidencia()
        {
            return View();
        }

        public ActionResult RegistrarIncidencia()
        {
            return View();
        }

        public ActionResult BuscarIncidencia()
        {
            return View();
        }

        [HttpPost]
        public JsonResult registrarIncidencia(IncidenciaBean incidencia)
        {
            try{
            IncidenciaBean incidenciaReg = incidenciaDAO.RegistrarIncidencia(incidencia);
            return Json(new { incidenciaReg });
            }
            catch (Exception ex)
            {
                log.Error("Registrar Edificio - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al registrar" });
            }
            
        }

        [HttpPost]
        public JsonResult buscarIncidencia(IncidenciaBean incidencia)
        {
            try{
            List<IncidenciaBean> listaIncidencia = incidenciaFacade.Listarincidencia(incidencia);

            return Json(new { listaIncidencia });
            }
            catch (Exception ex)
            {
                log.Error("Registrar Edificio - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al buscar" });
            }
            
        }

        [HttpPost]
        public JsonResult eliminarIncidencia(IncidenciaBean incidencia)
        {
            try{
            
            string conexion = incidenciaFacade.Eliminarincidencia(incidencia);

                return Json(new { me = "Se eliminó correctamente" });
            }
            catch (Exception ex)
            {
                log.Error("Registrar Edificio - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al eliminar" });
            }
            
            
        }

        //?????????????????????????????????????????????????????modificar????????????????????????????????????????????????????????????????????????????????????????????????????????
        [HttpPost]
        public JsonResult modificarIncidencia(IncidenciaBean incidencia)
        {
            try{
            string conexion = incidenciaFacade.Modificarincidencia(incidencia);

                return Json(new { me = "Se modificó correctamente " + incidencia.NombreIncidencia });
            }
            catch (Exception ex)
            {
                log.Error("Registrar Edificio - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al modificar" });
            }
            
        }

        [HttpPost]
        public JsonResult cargarTipoIncidencias(TipoIncidenciaBean tipoincidencia)
        {
            try{
            //System.Diagnostics.Debug.WriteLine("--------------------------------------________HDP> " + departamento.Nombre);

            List<TipoIncidenciaBean> listaTipoIncidencia = tipoincidenciaFacade.ListarTipoIncidencia(tipoincidencia);

            //System.Diagnostics.Debug.WriteLine("--------------------------------------_________MIERDA> " + departamento.conexion);

            return Json(new { listaTipoIncidencia });
            }
            catch (Exception ex)
            {
                log.Error("Registrar Edificio - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al registrar" });
            }
            
        }

        [HttpPost]
        public JsonResult cargarEdificios(EdificioBean edificio)
        {
            try{
            //System.Diagnostics.Debug.WriteLine("--------------------------------------________HDP> " + departamento.Nombre);

            List<EdificioBean> listaEdificio = edificioFacade.Listaredificio(edificio);

            //System.Diagnostics.Debug.WriteLine("--------------------------------------_________MIERDA> " + departamento.conexion);

            return Json(new { listaEdificio });
            }
            catch (Exception ex)
            {
                log.Error("Registrar Edificio - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al registrar" });
            }
            
        }

        [HttpPost]
        public JsonResult cargarMantenibles(MantenibleBean mantenible)
        {
            try{
            //System.Diagnostics.Debug.WriteLine("--------------------------------------________HDP> " + departamento.Nombre);

            List<MantenibleBean> listaMantenible = mantenibleFacade.ListarMantenibleEdificio(mantenible);

            //System.Diagnostics.Debug.WriteLine("--------------------------------------_________MIERDA> " + departamento.conexion);

            return Json(new { listaMantenible });
            }
            catch (Exception ex)
            {
                log.Error("Registrar Edificio - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al registrar" });
            }
            
        }

        [HttpPost]
        public JsonResult cargarUsuarios(UsuarioBean usuario)
        {
            try{
            //System.Diagnostics.Debug.WriteLine("--------------------------------------________HDP> " + departamento.Nombre);

            List<UsuarioBean> listaUsuario = usuarioFacade.ListarUsuario(usuario);

            //System.Diagnostics.Debug.WriteLine("--------------------------------------_________MIERDA> " + departamento.conexion);

            return Json(new { listaUsuario });
            }
            catch (Exception ex)
            {
                log.Error("Registrar Edificio - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al registrar" });
            }
            
        }

        [HttpPost]
        public JsonResult cargarUsuariosxIncidencia(IncidenciaBean incidencia)
        {
            try{
            //System.Diagnostics.Debug.WriteLine("--------------------------------------________HDP> " + departamento.Nombre);

            List<IncidenciaBean> listaUsuarioxincidencia = incidenciaDAO.ListarIncidenciaxHabitante(incidencia);
            
            //System.Diagnostics.Debug.WriteLine("--------------------------------------_________MIERDA> " + departamento.conexion);

            return Json(new { listaUsuarioxincidencia });
            }
            catch (Exception ex)
            {
                log.Error("Registrar Edificio - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al registrar" });
            }
            
        }

        [HttpPost]
        public JsonResult cargarTipoDoc(TipoDocBean tipodoc)
        {
            try{    
            List<TipoDocBean> listaTipoDoc = tipodocFacade.ListarTipoDoc(tipodoc);

                return Json(new { listaTipoDoc });
            }
            catch (Exception ex)
            {
                log.Error("Registrar Edificio - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al registrar" });
            }
            

        }

        public JsonResult cargarDpto(DepartamentoBean departamento)
        {
            try{
                List<DepartamentoBean> listaDepartamento = departamentoFacade.Listardepartamento(departamento);
                return Json(new { listaDepartamento });
            }
            catch (Exception ex)
            {
                log.Error("Registrar Edificio - GET(EXCEPTION):", ex);
                return Json(new { me = "Ocurrió un error al registrar" });
            }
            

        }

        [HttpPost]
        public JsonResult setearEdificio(EdificioBean edificio)
        {
            try
            {
                List<EdificioBean> llegadaSeteo = edificioDAO.SetearEdificio(edificio);
                return Json(new { llegadaSeteo });
            }
            catch (Exception ex)
            {
                log.Error("setearEdificio - GET(EXCEPTION):", ex);
                return Json(new { llegadaSeteo = "Ocurrió un error al eliminar" });
            }
        }
    }
}
